// dateUtils.js

/**
 * 格式化日期
 * @param {*} date 日期对象或日期字符串
* @param {*} format 格式化字符串
 */

export const formatDate = (date, format = 'YYYY-MM-DD HH:mm:ss') => {
    if (!(date instanceof Date)) {
        date = new Date(date);
    }

    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');

    // 中文月份名称
    const monthNames = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'];
    const chineseMonth = monthNames[date.getMonth()];

    return format
      .replace('YYYY', year)
      .replace('MM', month)
      .replace('DD', day)
      .replace('HH', hours)
      .replace('mm', minutes)
      .replace('ss', seconds)
      .replace('M月', chineseMonth); // 支持中文月份替换
};

/**
 * 获取日期之间的差值
 * @param {*} date1 日期对象或日期字符串
 * @param {*} date2 日期对象或日期字符串
 */
export const getDateDiff = (date1, date2) => {
    if (!(date1 instanceof Date)) {
        date1 = new Date(date1);
    }
    if (!(date2 instanceof Date)) {
        date2 = new Date(date2);
    }

    const diffTime = Math.abs(date2 - date1);
    return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
};

/**
 * 根据单位和数量计算新的日期
 * @param {Date} date 基准日期
 * @param {number} n 数量
 * @param {string} unit 单位（'day', 'week', 'month', 'year'）
 * @returns {Date} 计算后的日期
 */
const calculateDate = (date, n, unit) => {
    switch (unit) {
        case 'week':
            return new Date(date.getTime() + n * 7 * 24 * 60 * 60 * 1000);
        case 'month':
            date.setMonth(date.getMonth() + n);
            return date;
        case 'year':
            date.setFullYear(date.getFullYear() + n);
            return date;
        case 'day':
        default:
            return new Date(date.getTime() + n * 24 * 60 * 60 * 1000);
    }
};

/**
 * 获取当前日期 n 天、周、月或年 {{之后}}||{{之前}} 的日期
 * @param {number} n 数量 负数为之前的日期
 * @param {string} unit 单位：（'day', 'week', 'month', 'year'）默认为 'day'
 * @returns {Date} 计算后的日期
 */
export const getNewDate = (n = 0, unit = 'day') => {
    const currentDate = new Date();
    return calculateDate(currentDate, n, unit);
};
